package club.kingyin.core;

import com.sun.istack.internal.Nullable;

/**
 * spring 容器中 Bean 创建之前的信息都会保存在这里
 * 包括了 Bean 的类型，
 * @author : kingyins
 * @version : 1.0
 * @program : my-spring
 * @description : 描述 Bean 的信息
 * @create : 2021年07月16日 14:39
 **/
public interface BeanDefinition {



    /**
     * 设置Bean的名字
     * @param beanClassName bean名称
     */
    void setBeanClassName(@Nullable String beanClassName);

    /**
     * 获得Bean的名字
     * @return BeanClassName
     */
    @Nullable
    String getBeanClassName();

    /**
     * 设置Bean的作用域 单例 原型
     * @param scope 作用域
     */
    void setScope(@Nullable Scope scope);


    /**
     * 获得Bean的作用域 单例 原型
     * @return 作用域
     */
    @Nullable
    Scope getScope();

    /**
     * 判断是否是单例
     * @return 布尔
     */
    boolean isSingleton();

    /**
     * 判断是否是原型
     * @return 布尔
     */
    boolean isPrototype();

    /**
     * 获得Bean类型
     * @return class
     */
    Class<?> getBeanClass();

}
